<?php

App::import('model','AttachTipo');

class Attach extends AppModel {

    var $useTable = 'attach'; // nome della tabella

	public $belongsTo = array(
        'AttachTipo' => array(
            'className'    => 'AttachTipo' 
            ,'foreignKey' => 'attach_tipo'
        ) 
	);
	
	var $attachTipo = null;

	private $fileTemporaneo = null;
	private $eliminaFileTemporaneo = true;
	
	public $path = null;
	public $filename = null;
	// valorizzato con il path assoluto del file nel caso di ftp o database verrà scaricato su una cartella temporanea
	private $file = null;
	

	public function setFileTemporaneo($fileTemporaneo,$eliminaFileTemporaneo = true) {
		$this->fileTemporaneo=$fileTemporaneo;
		$this->eliminaFileTemporaneo = $eliminaFileTemporaneo;
	}
	
	public function eliminaFileTemporaneo() {
		return $this->eliminaFileTemporaneo;
	}
	
	public function getFileTemporaneo() {
		return $this->fileTemporaneo;
	}
	
	public function getFile() {
		return $this->file;
	}
	
	public function getAbsolutePath(){
		if (!$this->attachTipo->field("path_assoluto")) {
			return WWW_ROOT.$this->path;
		} else {
			return $this->path;
		}
	}
	
	public function getThumbFile() {
		$www_root="";
		if(!$this->attachTipo->field("path_assoluto")) {
			$www_root = WWW_ROOT;
		}
		if ($this->attachTipo->field("thumb")) {
			if (file_exists($www_root.$this->path.DS."thumb_".$this->filename)) {
				return $this->path.DS."thumb_".$this->filename;
			}
		} 
		return $this->path.DS.$this->filename;
	}
	
	public function beforeDelete($cascade = true) {
	
		if (parent::beforeDelete()) {
			if (!isset($this->data) || (is_array($this->data) && empty($this->data) )  ) {
				$ret = $this->read(null,$this->id);
				// print_r("id".$this->id);die;
				if (empty($ret)) {
					return false;
				}
			}
			$this->deleteFile();
		} else {
			return false;
		}
		
	}
	
	private function deleteFile() {
			if ($this->attachTipo->data['AttachTipo']['tipo_mem'] == "DB") {
				// memorizzazione file su database
				App::uses("AttachDB", "Lib/attach");
				$attachDriver = new AttachDB($this);
			} else if ($this->attachTipo->data['AttachTipo']['tipo_mem'] == "FILE") {
				// memorizzazione file su filesystem
				App::uses("AttachFILE", "Lib/attach");
				$attachDriver = new AttachFILE($this);
			} else if ($this->attachTipo->data['AttachTipo']['tipo_mem'] == "FTP") {
				// memorizzazione file su ftp
				App::uses("AttachFTP", "Lib/attach");
				$attachDriver = new AttachFTP($this);
			} else {
				// tipo memorizzazione non supportata
				throw new Exception("tipo memorizzazione non supportata");
			}
			return $attachDriver->delete();
	}
	
	public function read($fields = null, $id = null) {
		// print_r("sono qui"); die;
		$ret = parent::read($fields, $id);
		if ($ret) {
			// leggo la configurazione del tipo attach
			$this->attachTipo = new AttachTipo();
			$this->attachTipo->read(null, $ret["Attach"]["attach_tipo"]);
			$this->file = $this->readFile();
		}		
		return $ret;
	}
    
	private function readFile() {
			if ($this->attachTipo->data['AttachTipo']['tipo_mem'] == "DB") {
				// memorizzazione file su database
				App::uses("AttachDB", "Lib/attach");
				$attachDriver = new AttachDB($this);
			} else if ($this->attachTipo->data['AttachTipo']['tipo_mem'] == "FILE") {
				// memorizzazione file su filesystem
				App::uses("AttachFILE", "Lib/attach");
				$attachDriver = new AttachFILE($this);
			} else if ($this->attachTipo->data['AttachTipo']['tipo_mem'] == "FTP") {
				// memorizzazione file su ftp
				App::uses("AttachFTP", "Lib/attach");
				$attachDriver = new AttachFTP($this);
			} else {
				// tipo memorizzazione non supportata
				throw new Exception("tipo memorizzazione non supportata");
			}
			return $attachDriver->read();
	}
	
	// public function save($data = null, $validate = true, $fieldList = array()) {
// 		
			// parent::save($data, $validate, $fieldList);
			// // leggo la configurazione del tipo attach
	// }

	public function afterSave($created) {
			$this->file = $this->saveFile();
	}
	
	
	private function saveFile() {
			$this->attachTipo = new AttachTipo();
			$this->attachTipo->read(null,$this->field("attach_tipo"));
			// print_r($this->attachTipo);die;
			if ($this->attachTipo->data['AttachTipo']['tipo_mem'] == "DB") {
				// memorizzazione file su database
				App::uses("AttachDB", "Lib/attach");
				$attachDriver = new AttachDB($this);
			} else if ($this->attachTipo->data['AttachTipo']['tipo_mem'] == "FILE") {
				// memorizzazione file su filesystem
				App::uses("AttachFILE", "Lib/attach");
				$attachDriver = new AttachFILE($this);
			} else if ($this->attachTipo->data['AttachTipo']['tipo_mem'] == "FTP") {
				// memorizzazione file su ftp
				App::uses("AttachFTP", "Lib/attach");
				$attachDriver = new AttachFTP($this);
			} else {
				// tipo memorizzazione non supportata
				throw new Exception("tipo memorizzazione non supportata");
			}
			return $attachDriver->save();
	}

}

?>